﻿Imports Dainfo.ControleEstoque.Model
Imports System.Data.SqlClient

Public Class DadosCliente
    Inherits AcessoDadosBase


    Public Function GetAll() As List(Of Cliente)
        Dim clientes As New List(Of Cliente)
        For Each row As DataRow In ExecuteReaderReturnTable(GetCommand("Select * From Cliente")).Rows
            Dim entidade As Cliente = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                clientes.Add(entidade)
            End If
        Next
        Return clientes
    End Function

    Public Function GetById(ByVal codigo As Integer) As Cliente
        Dim entidade As Cliente = Nothing
        Dim cmd As SqlCommand = GetCommand("Select * From Cliente Where CodCliente = @Codigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        Dim table As DataTable = ExecuteReaderReturnTable(cmd)
        If table.Rows.Count > 0 Then
            entidade = GetEntidadeByTableRow(table.Rows(0))
        End If
        Return entidade
    End Function

    Public Function GetByNome(ByVal nome As String) As List(Of Cliente)
        Dim clientes As New List(Of Cliente)
        Dim cmd As SqlCommand = GetCommand("Select * From Cliente Where Nome like '%' + @Nome + '%'")
        AddParameterToCmd(cmd, "@Nome", nome)

        For Each row As DataRow In ExecuteReaderReturnTable(cmd).Rows
            Dim entidade As Cliente = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                clientes.Add(entidade)
            End If
        Next
        Return clientes
    End Function

    Public Sub Update(ByVal cliente As Cliente)
        Dim cmd As SqlCommand = GetCommand("Update Cliente Set Nome = @Nome, CPF_CNPJ = @CPF_CNPJ, " & GetContatoStringUpdate() & " Where CodCliente = @Codigo")
        AddParameterToCmd(cmd, "@Codigo", cliente.Codigo)
        AddParameterToCmd(cmd, "@Nome", cliente.Nome)
        AddParameterToCmd(cmd, "@CPF_CNPJ", cliente.CPF_CNPJ)
        PopulateCmdWithContatoValues(cmd, cliente)
        ExecuteNonQuery(cmd)
    End Sub

    Public Sub Delete(ByVal codigo As Integer)
        Dim cmd As SqlCommand = GetCommand("Delete From Cliente Where CodCliente=@Codigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        ExecuteScalar(cmd)
    End Sub

    Public Sub Insert(ByVal cliente As Cliente)
        Dim cmd As SqlCommand = GetCommand("Insert into Cliente (Nome, CPF_CNPJ, Bairro, Cep, Cidade, Estado, Endereco, Telefone1, Telefone2, Email, Observacoes) Values (@Nome, @CPF_CNPJ, @Bairro, @Cep, @Cidade, @Estado, @Endereco, @Telefone1, @Telefone2, @Email, @Observacoes)")
        AddParameterToCmd(cmd, "@Nome", cliente.Nome)
        AddParameterToCmd(cmd, "@CPF_CNPJ", cliente.CPF_CNPJ)
        PopulateCmdWithContatoValues(cmd, cliente)
        ExecuteScalar(cmd)
    End Sub

    Private Function GetEntidadeByTableRow(ByVal row As DataRow) As Cliente
        Dim entidade As New Cliente
        entidade.Codigo = GetStringFromRow(row, "CodCliente")
        entidade.Nome = GetStringFromRow(row, "Nome")
        entidade.CPF_CNPJ = GetStringFromRow(row, "CPF_CNPJ")
        BuildContatoWithDataRow(row, entidade)
        Return entidade
    End Function

End Class
